import axios from 'axios'
import nprogress from '@logdna/nprogress'
import { registerInterceptor } from './interceptors'
import { remove } from 'src/util/auth'
import { ElMessage, ElMessageBox } from 'element-plus'
import router from 'src/router'

const BASE_URL = import.meta.env.NODE_ENV !== 'production' ? import.meta.env.VITE_APP_BASE_API : import.meta.env.VITE_APP_SERVICE_URL

const instance = axios.create({
  baseURL: BASE_URL,
  timeout: 20 * 1000,
  timeoutErrorMessage: '网络超时，请稍候重试！',
  headers: {
    'X-Requested-With': 'XMLHttpRequest'
  }
})

// 请求错误处理
instance.interceptors.request.use(
  (config) => config,
  (error) => {
    ElMessage.error({
      message: error.message || '未知错误',
      duration: 3 * 1000
    })
    return Promise.reject(error)
  }
)

// 响应错误处理
instance.interceptors.response.use(
  (response) => response,
  (error) => {
    nprogress.done()
    if (error.response && error.response.status) {
      switch (error.response.status) {
        case 401:
          remove()
          router.replace('/login')
          break
        case 403:
          ElMessage.error({
            message: '您无权限操作，请联系管理人员',
            duration: 3 * 1000
          })
          break
        case 404:
          router.replace('/404')
          break
        case 406:
          ElMessageBox.alert('您的帐号已在别处登陆！', '提示', {
            type: 'error'
          }).then(() => {
            remove()
            router.replace('/login')
          })
          break
        case 408:
          ElMessage.error({
            message: '网络超时，请检查网络后重试',
            duration: 3 * 1000
          })
          break
        default:
          ElMessage.error({
            message: '系统异常，请联系管理人员',
            duration: 3 * 1000
          })
          break
      }
    } else {
      ElMessage.error({
        message: '系统异常，请联系管理人员',
        duration: 3 * 1000
      })
    }
    return Promise.reject(error)
  }
)

// 注册拦截器
registerInterceptor(instance)

export default instance
